package com.cskaoyan.javase.oop2.protected3.exercise3;

/**
 * @description: Demo和Test都继承了Object类中的protected修饰的成员方法clone()
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * Java当中每一个类 如果没有显式定义父类 都继承了Object
 * Object类当中有一个protected权限的方法，clone()
 *
 * protected  Object clone()
 *
 * 首先明确：clone方法是Object类当中的受保护成员
 * Demo和Test都是Object的子类
 * Object类是java.lang包下，肯定不同包
 * 如果不同包，只考虑一种情况，在子类中创建自身子类对象，可以访问的
 * 创建Test对象叫做 在子类中创建其他子类的对象，不可以访问的
 *
 */
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Demo d = new Demo();//能访问吗？
        System.out.println(d.clone());
        Test t = new Test();//能访问吗？
        //'clone()' has protected access in 'java.lang.Object' 告诉你没有访问权限
        //System.out.println(t.clone());
    }
}

//Class 'Test' explicitly extends 'java.lang.Object'.
class Test extends Object{
    public static void main(String[] args) throws CloneNotSupportedException {
        Test test = new Test();
        test.clone(); //当前类中创建当前子类对象，可以访问
    }

}
